<?php


namespace app\admin\model;

class RoleReRoute extends Base
{
    /**
     * Desc: 角色关联路由
     * User: 苏鹏
     * Date: 2023/9/21
     * Time: 10:58
     * @return void
     */
    public function setRoleReRoute(int $role_id, string $route_ids)
    {

        if(empty($role_id))
        {
            return;
        }
        //如果路由为空删除角色所有关联
        $route_ids = json_decode($route_ids, true);
        if(empty($route_ids))
        {
            $this->where('role_id', '=', $role_id)->delete();
            return;
        }
        try{
            $old_route_ids = $this->where('role_id', $role_id)->column('route_id');
            $this->startTrans();
            //查询角色拥有权限，对比差集，删除差集中的数据
            $diff_route_ids_del = array_diff($old_route_ids, $route_ids);  //需要删除的权限
            $diff_route_ids_save = array_diff($route_ids,$old_route_ids);  //需要保存的权限
            //保存
            if(!empty($diff_route_ids_save)){
                $data = [];
                foreach ($diff_route_ids_save as $k=>$v)
                {
                    $data[] = [
                        'role_id'  => $role_id,
                        'route_id' => $v
                    ];
                }
                $this->saveAll($data);
            }
            //删除
            if(!empty($diff_route_ids_del))
            {
                $this->where('route_id', 'in', $diff_route_ids_del)->delete();
            }
            $this->commit();
        }catch (\Exception $e){
            $this->rollback();
            re_error_json($e->getMessage());
        }


    }
}